chore(config): leverage proc macros #9111
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
This PR leverages derive_setters and merge to reduce the amount of changes required when adding a field to the configuration options.
The manual setup is error prone as there are 4 places that need to be updated and forgetting the final place will result in code compiling, but the field never getting layered properly.
Testing Instructions
Existing unit & integration tests, but also looking what the proc macros are generating (outputs shown are produced using
rust-analyzer
's Expand macro feature:Output of
#[derive(Setters)]
Which exactly matches what
create_builder
would produce:#derive(Merge)
producesand
Merge
is defined forOption
as :source
So
self.api_url
will only be set toother.api_url
if there isn't a value present which is the behavior we want since we merge configs from highest to lowest precedence.